package io.renren.base.service;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.sql.SqlHelper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import io.renren.framework.db.mybatis.NativeSqlRunner;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;
import java.util.Map;


/**
 * @program: mybatisplus-spring-boot
 * @description:Service基础公共组件
 * 对增强功能的实现
 * @author: xuefeng.gao
 * @create: 2018-08-16 14:48
 **/
public class BaseServiceImpl<M extends BaseMapper<T>,T>  extends ServiceImpl<M, T> implements IBaseService<T> {

    @Autowired
    SqlSession session;

    /**
     * 根据sql查询总数量
     * SqlRunner.db().selectList("select * from tbl_user where name={0}", "Caratacus")
     *
     * @param sql  sql语句，可添加参数，格式：{0},{1}
     * @param args 只接受String格式
     * @return
     */
    @Override
    public int nQueryCount(String sql, Object... args) {
        return NativeSqlRunner.db(session).selectCount(sql,args);
    }

    /**
     * 根据sql查询Map结果集
     * SqlRunner.db().selectList("select * from tbl_user where name={0}", "Caratacus")
     *
     * @param sql  sql语句，可添加参数，格式：{0},{1}
     * @param args 只接受String格式
     * @return
     */
    @Override
    public List<Map<String, Object>> nQueryList(String sql, Object... args) {
        return NativeSqlRunner.db(session).selectList(sql,args);
    }

    /**
     * 根据sql查询一个字段值的结果集
     * 注意：该方法只会返回一个字段的值， 如果需要多字段，请参考{@code selectList()}
     *
     * @param sql  sql语句，可添加参数，格式：{0},{1}
     * @param args 只接受String格式
     * @return
     */
    @Override
    public List<Object> nQueryObjs(String sql, Object... args) {
        return NativeSqlRunner.db(session).selectObjs(sql,args);
    }

    /**
     * 根据sql查询一个字段值的一条结果
     * 注意：该方法只会返回一个字段的值， 如果需要多字段，请参考{@code selectOne()}
     *
     * @param sql  sql语句，可添加参数，格式：{0},{1}
     * @param args 只接受String格式
     * @return
     */
    @Override
    public Object nQueryObj(String sql, Object... args) {
        return NativeSqlRunner.db(session).selectObj(sql,args);
    }

    @Override
    public Map<String, Object> nQueryOne(String sql, Object... args) {
        return SqlHelper.getObject(nQueryList(sql, args));
    }

}
